<template xlang="wxml" minapp="mpvue">
  <view>
  </view>
</template>
<script>
  export default {
    name: 'tki-file-manager',
    props: {},
    data() {
      return {}
    },
    methods: {
      _openFile() {
        // #ifdef APP-PLUS
        if (plus.os.name.toLowerCase() != "android") {
          uni.showModal({
            title: '提示',
            content: '仅支持Android平台',
            success: function(res) {}
          });
          return false
        }
        let that = this
        // java 代码来自 http://www.cnblogs.com/panhouye/archive/2017/04/23/6751710.html
        let main = plus.android.runtimeMainActivity();
        let Intent = plus.android.importClass("android.content.Intent");

        // 
        let fileIntent = new Intent(Intent.ACTION_GET_CONTENT)
        //fileIntent.setType(“image/*”);//选择图片
        //fileIntent.setType(“audio/*”); //选择音频
        //fileIntent.setType(“video/*”); //选择视频 （mp4 3gp 是android支持的视频格式）
        //fileIntent.setType(“video/*;image/*”);//同时选择视频和图片
        fileIntent.setType("*/*"); //无类型限制
        fileIntent.addCategory(Intent.CATEGORY_OPENABLE);
        main.startActivityForResult(fileIntent, 1);
        // 获取回调
        main.onActivityResult = function(requestCode, resultCode, data) {
          // console.log('123',requestCode,resultCode,data)
          let Activity = plus.android.importClass("android.app.Activity");
          let ContentUris = plus.android.importClass("android.content.ContentUris");
          let Cursor = plus.android.importClass("android.database.Cursor");
          let Uri = plus.android.importClass("android.net.Uri");
          let Build = plus.android.importClass("android.os.Build");
          let Environment = plus.android.importClass("android.os.Environment");
          let DocumentsContract = plus.android.importClass("android.provider.DocumentsContract");
          let MediaStore = plus.android.importClass("android.provider.MediaStore");
          // 给系统导入 contentResolver
          let contentResolver = main.getContentResolver()
          plus.android.importClass(contentResolver);
          // 返回路径
          let path = '';
          if (resultCode == Activity.RESULT_OK) {
            let uri = data.getData()
            // console.log('data.getData()', data.getData())
            if ("file" == uri.getScheme().toLowerCase()) { //使用第三方应用打开
              path = uri.getPath();
              // console.log('path1', path)
              return;
            }
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { //4.4以后
              path = getPath(this, uri);
            } else { //4.4以下下系统调用方法
              path = getRealPathFromURI(uri)
            }
            // console.log('path2', path)
            // 回调
            that.$emit('result', path)
          }
          // 4.4 以上 从Uri 获取文件绝对路径
          function getPath(context, uri) {
            let isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
            let scheme = uri.getScheme().toLowerCase()
            if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
              // console.log('A')
              // ExternalStorageProvider
              if (isExternalStorageDocument(uri)) {
                // console.log('B')
                let docId = DocumentsContract.getDocumentId(uri);
                let split = docId.split(":");
                let type = split[0];
                // 如果是手机内部存储
                if ("primary" == type.toLowerCase()) {
                  // console.log('C')
                  return Environment.getExternalStorageDirectory() + "/" + split[1];
                } else {
                  // console.log('D')
                  return '/storage/' + type + "/" + split[1];
                }
              }
              // DownloadsProvider
              else if (isDownloadsDocument(uri)) {
                // console.log('E')
                // let split = id.split(":");
                // return split[1]
                let id = DocumentsContract.getDocumentId(uri);
                var ContentUris = plus.android.importClass('android.content.ContentUris');
                var contentUri = ContentUris.withAppendedId(
                  //    Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
                  Uri.parse("content://downloads/public_downloads"), id);
                return getDataColumn(main, contentUri, null, null);
                // console.log(id)
                // let contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), id);
                // return getDataColumn(context, contentUri, null, null);
              }
              // MediaProvider
              else if (isMediaDocument(uri)) {
                // console.log('F')
                let docId = DocumentsContract.getDocumentId(uri);
                let split = docId.split(":");
                let type = split[0];
                let contentUri = null;
                if ("image" == type.toLowerCase()) {
                  contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                } else if ("video" == type.toLowerCase()) {
                  contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                } else if ("audio" == type.toLowerCase()) {
                  contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                }
                let selection = "_id=?";
                let selectionArgs = [split[1]];
                return getDataColumn(context, contentUri, selection, selectionArgs);
              }
            }
            // MediaStore (and general)
            else if ("content" == scheme) {
              return getDataColumn(context, uri, null, null);
            }
            // File
            else if ("file" == scheme) {
              return uri.getPath();
            }
          }
          // 4.4 以下 获取 绝对路径
          function getRealPathFromURI(uri) {
            let res = null
            let proj = [MediaStore.Images.Media.DATA]
            let cursor = contentResolver.query(uri, proj, null, null, null);
            if (null != cursor && cursor.moveToFirst()) {
              ;
              let column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
              res = cursor.getString(column_index);
              cursor.close();
            }
            return res;
          }
          // 通过uri 查找出绝对路径
          function getDataColumn(context, uri, selection, selectionArgs) {
            let cursor = null;
            let column = "_data";
            let projection = [column];
            // let contentResolver = context.getContentResolver()
            // plus.android.importClass(contentResolver);
            cursor = contentResolver.query(uri, projection, selection, selectionArgs, null);
            if (cursor != null && cursor.moveToFirst()) {
              let column_index = cursor.getColumnIndexOrThrow(column);
              return cursor.getString(column_index);
            }
          }

          function isExternalStorageDocument(uri) {
            return "com.android.externalstorage.documents" == uri.getAuthority() ? true : false
          }

          function isDownloadsDocument(uri) {
            return "com.android.providers.downloads.documents" == uri.getAuthority() ? true : false
          }

          function isMediaDocument(uri) {
            return "com.android.providers.media.documents" == uri.getAuthority() ? true : false
          }
        }
        // #endif
        // #ifndef APP-PLUS
        uni.showModal({
          title: '提示',
          content: '仅支持Android平台',
          success: function(res) {

          }
        });
        // #endif
      },
    },
    onLoad() {
      // 			plus.io.resolveLocalFileSystemURL( '/storage/emulated/0', function(fs) {
      // 				var directoryReader = fs.createReader();
      // 				directoryReader.readEntries(function(entries) {
      // 					var i;
      // 					for (i = 0; i < entries.length; i++) {
      // 						console.log(entries[i].name);
      // 					}
      // 				}, function(e) {
      // 					console.log("Read entries failed: " + e.message);
      // 				});
      // 			}, function(e) {
      // 				console.log("Request file system failed: " + e.message);
      // 			});
    }
  }
</script>
